package br.gov.sjc.socialalimenta;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import br.gov.sjc.export.NomeArquivo;
import br.gov.sjc.export.SincronizarDados;
import br.gov.sjc.export.exportarDados;
import br.org.sjc.validacao.Sair;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class SocialAlimenta2Activity extends Sair {

	static final int DATE_DIALOG_ID = 0;
	private static final String TAG = "SocialAlimenta2Activity";
	//Declara Cursor
	Cursor Verifica;

	//Declara base de dados
	public static SQLiteDatabase BancoDados = null;
	public static String nomeBanco = "SocialAlimenta";
	public void openDB(){
		try{
			//File dbFile = new File(Environment.getExternalStorageDirectory(), nomeBanco);
			//BancoDados = SQLiteDatabase.openOrCreateDatabase(dbFile,null);

			BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			Log.v("SocialAlimenta2Activity", "BancoDados.openOrCreateDatabase();");
		}catch (Exception E){
			Log.e("SocialAlimenta2Activity", "Erro em BancoDados.close();"+E.getMessage());
		} 
	}
	public void closeDB(){
		BancoDados.close();
		Log.v("SocialAlimenta2Activity", "BancoDados.close();");
	}

	//Declara Variáveis
	String data2;

	//Declara os itens

	Button  btNovaPesquisa, btSincronizar, btSair, btConfs;


	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		registerBaseActivityReceiver();

		//showDialog(DATE_DIALOG_ID);

		//Metodos
		zeraNumeroDeMembroSias();
		criaBanco();
		populaBanco();
		criapastas();
		mensagemAlerta("Verificando","Pastas Ok");
		
		//Inicio da a��o do Botao da pesquisa
		btNovaPesquisa = (Button) findViewById(R.id.btNovaPesquisa);
		btNovaPesquisa.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				ittIr();
			}
		});//fim acao do botao pesquisa

		//Inicio da a��o do Botao de btConfs
		btConfs = (Button) findViewById(R.id.btConfs);
		btConfs.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				ittConfs();
			}
		});//fim acao do botao pesquisa

		//Inicio da a��o do Botao da pesquisa
		btSair = (Button) findViewById(R.id.btSair);
		btSair.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				closeAllActivities();
			}
		});//fim acao do botao pesquisa



		/**
		 * chama a sincroniza��o de Exporta��o
		 */
		btSincronizar = (Button) findViewById(R.id.btSincronizar);
		btSincronizar.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				//Este button apenas grava o nome do tecnico e a data que ir� realizar a pesquisa

				chamaExportacao();
			}
		});//fim acao do botao pesquisa

	}
	public void zeraNumeroDeMembroSias() {
		NumeroSias ns = new NumeroSias();
		ns.setZeroNumeroDoMembroDaFamilia();

	}
	protected void ittConfs() {
		/** InitComponents*/
		Intent ittConfs = new Intent(getApplicationContext(), ConfigurarActivity.class);
		startActivity(ittConfs);
	}
	protected void ittIr() {
		/** InitComponents*/
		Intent ittPesquisa = new Intent(getApplicationContext(), progressoActivity.class);
		startActivity(ittPesquisa);
	}
	public void chamaExportacao (){ 
		if (temDadosParaSincronizar()){
			// encaminha para a activity que realizar� a exporta��o dos dados
			if (TemConexao()){
				Intent ittPesquisa = new Intent(getApplicationContext(), SincronizarDados.class);
				startActivity(ittPesquisa);
			}else{
				mensagemAlerta("Rede","Não foi possível conectar com a rede");
			}
		}else{ 
			mensagemAlerta("Dados","Não existem dados alterados");
		}
	}
	public void criaBanco(){
		try{
			//File dbFile = new File(Environment.getExternalStorageDirectory(), nomeBanco);
			//BancoDados = SQLiteDatabase.openOrCreateDatabase(dbFile,null);
			//BancoDados = openOrCreateDatabase(nomeBanco,MODE_WORLD_READABLE,null);
			openDB();

			String SQL = "CREATE TABLE IF NOT EXISTS tab_SocialA_Configuracao(_id INTEGER PRIMARY KEY, Nome TEXT,Matricula TEXT,Obs TEXT,PlacaPatrimonial TEXT, Data TEXT)";
			BancoDados.execSQL(SQL);
			String SQL2 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Progresso(_id INTEGER PRIMARY KEY, SiasN INT, etapa TEXT, Descricao TEXT)";
			BancoDados.execSQL(SQL2);
			String SQL3 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Nome(_id INTEGER PRIMARY KEY, SiasN INT,idMembro INT, Nome TEXT,DNasc DATE, NomeMae TEXT, NomePai TEXT,NaturalCidade TEXT, Titular TEXT DEFAULT 'Não', Excluido TEXT DEFAULT 'Não', Parentesco TEXT)";
			BancoDados.execSQL(SQL3);
			String SQL4 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Endereco(_id INTEGER PRIMARY KEY, SiasN INT, Endereco TEXT, numero TEXT, Ap TEXT, Bloco TEXT, Complemento TEXT, Referencia TEXT, CEP TEXT, Bairro TEXT)";
			BancoDados.execSQL(SQL4);
			String SQL5 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Localizado(_id INTEGER PRIMARY KEY, SiasN INT, Localizado TEXT,Mudouse TEXT DEFAULT 'Não',EndInex TEXT DEFAULT 'Não', Sosam TEXT, NaoLocalizada TEXT DEFAULT '-')";
			BancoDados.execSQL(SQL5);
			String SQL6 = "CREATE TABLE IF NOT EXISTS tab_SocialA_DadosPessoais(_id INTEGER PRIMARY KEY, SiasN INT, idMembro INT, Sexo TEXT,EstCivil TEXT,Estuda TEXT, Cor TEXT, Alfabetiza TEXT, FreqEscola TEXT, Trabalha TEXT DEFAULT 'Não', PCD TEXT DEFAULT 'Não')";
			BancoDados.execSQL(SQL6);
			String SQL7 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Escolaridade(_id INTEGER PRIMARY KEY, SiasN INT, idMembro INT, Ensino TEXT, EnsCurso TEXT,EnsSerie TEXT, EnsConcluido TEXT DEFAULT 'Não', EnsEsp TEXT DEFAULT 'Não')";
			BancoDados.execSQL(SQL7);
			String SQL8 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Documentos(_id INTEGER PRIMARY KEY, SiasN INT,idMembro INT, RG TEXT,RGExp TEXT, RGUF TEXT, RGDataExp TEXT, CPF TEXT, CPFDataExp TEXT, CTPS TEXT, CTPSSerie TEXT, CTPSDataExp TEXT, CTPSUF TEXT, NIS TEXT)";
			BancoDados.execSQL(SQL8);
			String SQL9 = "CREATE TABLE IF NOT EXISTS tab_SocialA_Trabalho(_id INTEGER PRIMARY KEY, SiasN INT,idMembro INT, Tipo TEXT, Rendimento TEXT, HorasporMes TEXT, Ocupacao TEXT,INSS TEXT DEFAULT 'Não')";
			BancoDados.execSQL(SQL9);
			String SQL13 = "CREATE TABLE IF NOT EXISTS tab_SocialA_TrabalhoOFR(_id INTEGER PRIMARY KEY, SiasN INT,idMembro INT, Fonte TEXT, Valor TEXT, Comprovante TEXT)";
			BancoDados.execSQL(SQL13);
			String SQL10 = "CREATE TABLE IF NOT EXISTS tab_SocialA_GrupoFamiliar(_id INTEGER PRIMARY KEY, SiasN INT, idMembro INT,Desc TEXT)";
			BancoDados.execSQL(SQL10);
			String SQL11 = "CREATE TABLE IF NOT EXISTS tab_SocialA_IndSegAlimen(_id INTEGER PRIMARY KEY, SiasN INT, Gestante TEXT,GestanteAcompMedico TEXT,GestanteAcompNutric TEXT,Nutriz TEXT,NutrizAcompMedico TEXT,NutrizAcompNutric TEXT,Intolerancia TEXT,IntoleranciaLactose TEXT,IntoleranciaGluten TEXT,IntoleranciaProteina TEXT,IntoleranciaOutra TEXT,IntoleranciaAcompMedico TEXT,IntoleranciaAcompNutric TEXT,Diabete TEXT,DiabeteAcompMedico TEXT,DiabeteAcompNutric TEXT,Anemia TEXT,AnemiaAcompMedico TEXT,AnemiaAcompNutric TEXT,Hipertensao TEXT,HipertensaoAcompMedico TEXT,HipertensaoAcompNutric TEXT,Obesidade TEXT,ObesidadeAcompMedico TEXT,ObesidadeAcompNutric TEXT)";
			BancoDados.execSQL(SQL11);
			String SQL12 = "CREATE TABLE IF NOT EXISTS tab_SocialA_AcessoAlimen(_id INTEGER PRIMARY KEY, SiasN INT, ArrozFrequencia TEXT,ArrozFormaAcesso TEXT, LeiteFrequencia TEXT,LeiteFormaAcesso TEXT, DerivadosFrequencia TEXT,DerivadosFormaAcesso TEXT, PaesFrequencia TEXT,PaesFormaAcesso TEXT, ManteigaFrequencia TEXT,ManteigaFormaAcesso TEXT, MacarraoFrequencia TEXT,MacarraoFormaAcesso TEXT, FubaFrequencia TEXT,FubaFormaAcesso TEXT, FrutasFrequencia TEXT, FrutasFormaAcesso TEXT, VerdurasFrequencia TEXT,VerdurasFormaAcesso TEXT, CarneFrequencia TEXT,CarneFormaAcesso TEXT, OvosFrequencia TEXT,OvosFormaAcesso TEXT, FarinhasFrequencia TEXT,FarinhasFormaAcesso TEXT)";
			BancoDados.execSQL(SQL12);
			String SQL14 = "DROP VIEW IF EXISTS vw_SocialA_total";
			BancoDados.execSQL(SQL14);
			String SQLView = "CREATE VIEW IF NOT EXISTS vw_SocialA_total AS "+ 
					"select * from "+
					"tab_SocialA_GrupoFamiliar as GF, "+
					"tab_SocialA_Endereco as E, "+
					"tab_SocialA_Localizado as L, "+
					"tab_SocialA_Nome as N, " +
					"tab_SocialA_DadosPessoais as DP, " +
					"tab_SocialA_Escolaridade as Es, " +
					"tab_SocialA_Documentos as D, " +
					"tab_SocialA_IndSegAlimen as ISA, " +
					"tab_SocialA_AcessoAlimen as AA, " +
					"tab_SocialA_Trabalho as T, " +
					"tab_SocialA_TrabalhoOFR as TOFR  "+
					"Where "+
					"E.SiasN = GF.SiasN AND "+
					"L.SiasN = GF.SiasN ";
			BancoDados.execSQL(SQLView);
			/* Bloco retirado da constru��o da View
			 * OR ("+
	        		"N.SiasN = GF.SiasN AND "+
	        		"N.idMembro = GF.idMembro AND " +
	        		"DP.SiasN = GF.SiasN AND " +
	        		"DP.idMembro = GF.idMembro AND " +
	        		"Es.SiasN = GF.SiasN AND " +
	        		"Es.idMembro = GF.idMembro AND " +
	        		"D.SiasN = GF.SiasN AND " +
	        		"D.idMembro = GF.idMembro  AND " +
	        		"ISA.SiasN = GF.SiasN AND " +
	        		"AA.SiasN = GF.SiasN AND "  +
	        		"T.SiasN = GF.SiasN AND " +
	        		"TOFR.SiasN = GF.SiasN AND " +
	        		"(T.idMembro = GF.idMembro OR " +
	        		"TOFR.idMembro = GF.idMembro))
			 */

			Log.i("SocialAlimenta2Activity", "criaBanco() executado com sucesso");



		}catch(Exception erro) {
			mensagemAlerta("Erro","Erro ao criar banco");
			erro.printStackTrace();
			Log.e("SocialAlimenta2Activity", "Erro em criaBanco(): "+erro.getMessage());

		}finally{
			closeDB();
		}
	}
	private boolean TemConexao() {
		boolean lblnRet = false;
		try
		{
			ConnectivityManager cm = (ConnectivityManager)
					getSystemService(Context.CONNECTIVITY_SERVICE);
			if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
				lblnRet = true;
			} else {
				lblnRet = false;
			}
		}catch (Exception e) {
			Log.e(TAG, "TemConexao - Erro: "+e.getMessage());
		}
		return lblnRet;
	}

	private boolean temDadosParaSincronizar(){
		boolean retorno = false;
		try{
			Log.v(TAG, "verificaRegistro() Início");
			String SQLQuery = "Select * from tab_SocialA_Localizado";
			Cursor cursor = BancoDados.rawQuery(SQLQuery, null);
			int counter = cursor.getCount();
			cursor.moveToFirst();
			
			String SQLQuery2 = "Select * from tab_SocialA_Nome";
			Cursor cursor2 = BancoDados.rawQuery(SQLQuery2, null);
			int counter2 = cursor2.getCount();
			cursor.moveToFirst();
			
			if ( (counter != 0 && counter2 != 0)||(counter == 0 && counter2 == 0)){
				retorno = true;
				Log.i(TAG, "verificaRegistro() !=0  e counter="+counter);
			}else{
				Log.e(TAG, "Erro: Verifica.getCount() =0 e counter="+counter);
			}
		}catch (Exception Err){
			mensagemAlerta("Erro","Erro Encontrado");
			Log.e(TAG, "Erro: "+Err.getMessage());
		}
		
		return retorno;
	}
	
	public void mensagemAlerta(String AlertTitle, String MSGAlert){
		AlertDialog.Builder Mensagem = new AlertDialog.Builder(SocialAlimenta2Activity.this);
		Mensagem.setTitle(AlertTitle);
		Mensagem.setMessage(MSGAlert);
		Mensagem.setNeutralButton("Ok", null);
		Mensagem.show();
	}

	public boolean populaBanco(){
		boolean ResultadoPopula = false;
		Log.v("SocialAlimenta2Activity", "ResultadoPopula = false");
		try{

			openDB();

			if (verificaRegistro()){
				Log.v("SocialAlimenta2Activity", "verificaRegistro() Existem Dados");
			}else{
				/*	for (int j=0;j < 10;j++){
					//int j=1;

					String insertE = "insert into tab_SocialA_Endereco (SIASN, Endereco, NUMERO, AP, BLOCO, COMPLEMENTO, REFERENCIA, CEP, BAIRRO)values ("+j+", 'RUA XINGU "+j+"', 691, '', '', 'CASA 1', '', '12200000', 'CIDADE VISTA VERDE');";
					BancoDados.execSQL(insertE);

					for (int i=0; i < 5;i++){
						//int i=2;
						String insertDP = "insert into tab_SocialA_DadosPessoais (SIASN, IDMEMBRO, SEXO, ESTCIVIL, ESTUDA, COR, ALFABETIZA, FREQESCOLA)values ("+j+", "+i+", 'Masculino', 'Solteiro', 'Não', 'Negra', 'Sim', 'Sim')";
						BancoDados.execSQL(insertDP);
						String insertD = "insert into tab_SocialA_Documentos (SIASN, IDMEMBRO, RG, RGEXP, RGUF, RGDATAEXP, CPF, CPFDATAEXP, CTPS, CTPSSERIE, CTPSDATAEXP, NIS)values ("+j+", "+i+", '273627090', 'SSPSP', 'SP', '1-07-1974', '18562427810', '01-04-2001', '', '', '', '');";
						BancoDados.execSQL(insertD);
						String insertEs = "insert into tab_SocialA_Escolaridade (SIASN, IDMEMBRO, ENSINO, ENSCURSO, ENSSERIE, ENSCONCLUIDO, ENSESP)values ("+j+", "+i+", 'Fundamental', '', '', 'Não', 'Não');";
						BancoDados.execSQL(insertEs);
						String insertGF = "insert into tab_SocialA_GrupoFamiliar (SIASN, IDMEMBRO)values ("+j+", "+i+");";
						BancoDados.execSQL(insertGF);
						String insertN = "insert into tab_SocialA_Nome (SIASN, IDMEMBRO, NOME, DNASC, NOMEMAE, NOMEPAI, NATURALCIDADE) values ("+j+", "+i+", 'ALEX APARECIDO MARTINS "+i+"', '31-10-1974', 'NATALINA DE FATIMA DO CARMO "+i+"', 'CLAUDINE JOSE MARTINS "+i+"', 'BALDIM - MG');";
						BancoDados.execSQL(insertN);
						String insertT = "insert into tab_SocialA_Trabalho (SIASN, IDMEMBRO, TIPO, RENDIMENTO, HORASPORMES, OCUPACAO, INSS)values ("+j+", "+i+", 'Informal', '1200', '48', 'Ajudante Geral', 'Sim');";
						BancoDados.execSQL(insertT);				
						String insertTOFR = "insert into tab_SocialA_TrabalhoOFR (SIASN, IDMEMBRO, FONTE, VALOR, COMPROVANTE)values ("+j+", "+i+", 'Pensão', '620', 'Hollerith');";
						BancoDados.execSQL(insertTOFR);
						Log.v("SocialAlimenta2Activity", "executado com sucesso = "+j+"/"+i);
					}
				} */

				ResultadoPopula = true;

				String insertC = "insert into tab_SocialA_Configuracao (Nome, Matricula, Obs, PlacaPatrimonial)values ('----', '0000', '', '225823');";
				BancoDados.execSQL(insertC);

				Log.v("SocialAlimenta2Activity", "populaBanco() executado com sucesso");
			}


		}catch(Exception e){
			mensagemAlerta("Erro","Erro Ao Criar Banco ");
			Log.e("SocialAlimenta2Activity", "populaBanco() erro:"+e.getMessage());
		}finally{
			closeDB();
		}
		return ResultadoPopula;
	}
	public boolean verificaRegistro(){
		boolean Retorno = false;
		try{
			Log.v("progressoActivity", "verificaRegistro() Início");
			//String SQLQuery = "Select * from tab_SocialA_GrupoFamiliar WHERE SiasN="+NumSias+" ";
			String SQLQuery = "Select * from tab_SocialA_Nome Order By SiasN ASC";
			Verifica = BancoDados.rawQuery(SQLQuery, null);
			int counter = Verifica.getCount();
			Verifica.moveToFirst();

			if ( counter !=0 ){

				Retorno = true;
				Log.i("progressoActivity", "verificaRegistro() !=0  e counter="+counter);
			}else{
				Log.e("progressoActivity", "Erro: Verifica.getCount() =0 e counter="+counter);

			}
		}catch (Exception Err){
			mensagemAlerta("Erro","Erro Encontrado");

			Log.e("progressoActivity", "Erro: "+Err.getMessage());
		}
		return Retorno;
	}
	private String PlacaPatrimonial(int id){
		String retorno = "";
		Cursor cVerifica = null;
		 
		if (BancoDados.isOpen()){
			Log.v(TAG, "BD isOpen");
			try{
				
				String SQLQuery = "Select * from tab_SocialA_Configuracao WHERE _id="+id;
				cVerifica = BancoDados.rawQuery(SQLQuery, null);
				cVerifica.moveToFirst();
				retorno = cVerifica.getString(cVerifica.getColumnIndex("PlacaPatrimonial"));
				Log.i(TAG,"PlacaPatrimonial():"+retorno);
			}catch(Exception e){
				Log.e(TAG,"PlacaPatrimonial():"+retorno+" / ERRO - "+e.getMessage());
				closeDB();
			}
		}else{
			Log.e(TAG,"BD not Open");
		}
		return retorno;
	}
	private boolean criapastas(){
		boolean retorno = false;
		
		openDB();
		
		String NomeArquivo = "socialAlimenta-";
		//TODO: Chamando o ID = 1 (somente deve existir esse ID nessa tabela.)
		NomeArquivo += PlacaPatrimonial(1);
		Log.i(TAG, "XML - Nome do arquivo:"+NomeArquivo);
		
		String espaco = " ";
	      //transforma o texto digitado em array de bytes
        byte[] dados = espaco.getBytes();
        
         
        try{
    		FileOutputStream fosIN = openFileOutput(NomeArquivo+"d.xml", Context.MODE_PRIVATE);
    		//fosIN.write(dados);
    		fosIN.close();
        	retorno = true;
        }catch(Exception e){
        	Log.e(TAG, "ERRO - IN:"+e.getMessage());
        	retorno = false;
        }
        try{
    		FileOutputStream fosOUT = openFileOutput(NomeArquivo+"u.xml", Context.MODE_PRIVATE);
    		//fosOUT.write(dados);
    		fosOUT.close();
        	retorno = true;
        }catch(Exception e){
        	Log.e(TAG, "ERRO - OUT:"+e.getMessage());
        	retorno = false;
        }
        closeDB();
		
		return retorno;
	}
	
	@Override
	protected void onResume() {
		//quando a Activity main receber o foco novamente abre-se novamente a conexão
		openDB();
		//método responsável pela atualiza da lista de dados na tela
		//adapter.notifyDataSetChanged();
		super.onResume();
	}
	@Override
	protected void onPause() {

		//toda vez que o programa peder o foco fecha-se a conexão com o BD
		closeDB();
		super.onPause();
	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unRegisterBaseActivityReceiver();
		finish();
	}
}